#include<stdio.h>
#include<conio.h>
int queue[30000];
int visited[101][101],dir[101][101],right=0,left=0;
int n, m, p, q, s, t;
int dx[]={-1,1,1,-1,-1,1,1,-1};
int dy[]={-1,-1,1,1,-1,-1,1,1};
void input(){
    int u,v,i;
    scanf("%d%d%d%d%d%d",&n, &m, &p, &q, &s, &t);
    for(i=0;i<m;i++){
        scanf("%d%d",&u,&v);
        visited[u][v]=-1;
    }
    queue[++right]=p;
    queue[++right]=q;
    visited[p][q]=1;
}
int isOk(int x,int y){
    if(x < 1 || y< 1) return 0;
    if(x>n || y>n)return 0l;
    return 1;
}
void bfs(){
    int i,u,v,x,y,j;
    do{
        x=queue[++left],y=queue[++left];
        printf("\n(%d,%d) ",x,y);
        for(i=0;i<4;i++){
            j=(i+dir[x][y])%4;
            u=x+dx[j];
            v=y+dy[j];
            
            if(!visited[u][v] && isOk(u,v)){
                queue[++right]=u;
                queue[++right]=v;
                printf("-->(%d,%d,%d) ",u,v,j);
                if(i!=j)visited[u][v]=visited[x][y]+1;
                else visited[u][v]=visited[x][y];
            }
            if(u==s && v==t)return;
        }
    }while(left<right);
}
int main(){
    input();
    bfs();
    printf("%d",visited[s][t]-1);
    getch();
    return 0;
}
    
    
